//  春风动力H0登录门户地址：
http://192.168.1.99/#/access_token=9775fa1f-f01c-4033-a15d-fec2aa8ad90d&token_type=bearer&expires_in=86399&refresh_token=f1cd9330-3b44-43fe-9848-25ea4919e19b&scope=default
// 因为路由中：首页入口组件
//   '/': {
//     component: dynamicWrapper(app, ['user', 'login', 'menu', 'homepage', 'sysConfig'], () => import('../layouts/BasicLayout')),
//   },
// 所以此时进入BasicLayout.js，

//!!! 重定向到登录页场景：
// 1.跳入门户的access_token过期或错误，此时h0认证接口调用失败，在error方法里调redirectLogin方法； 
// 2.用户手动把存入cookie,sessionStorage的access_token删除或改错，此时接口Authorization: bearer undefined，
// 封装的request会抛出401异常，调logout跳转'/user/login', 该页面调redirectLogin方法

componentDidMount(){
  this.checkDhrToken()
} 

redirectLogin(){
  let currentEnvURL = encodeURIComponent(window.location.protocol + '//' + window.location.host), 
  client_id = 'localhost';
  window.location.href = `${envUrl.ssoUrl}/oauth/oauth/authorize?response_type=token&client_id=${client_id}&redirect_uri=${currentEnvURL}`
}

//进入门户一定会调，情况1：携带access_token 
checkDhrToken = () => {
  // 地址栏是否携带access_token, true代表携带
  const hasUrlToken = window.location.hash.indexOf('access_token') !== -1
  // 地址栏携带的access_token,会获取到hash路由后面拼接的第一个参数值
  const urlToken = window.location.hash.slice(2).split('&')[0].split('=')[1]
  const access_token = hasUrlToken ? urlToken : Cookie.get("access_token")
  Ajax({
    url: `${envUrl.apiUrl}/iam/hzero/v1/users/self`,
    method: 'GET',
    Authorization:  'bearer ' + access_token,
    success: (response) => {
      const res = JSON.parse(response);
      if (res.failed === true) {
        notification.error({
          message: `${res.message}`,
        });
      }
      //接口排序调用
      let _this = this;
      window.sessionStorage.setItem('hhrName', res.realName);
      async function initialHome() {
        _this.queryUserInfo(); // 获取用户个人信息java
        _this.queryPersonInfo(); // 获取个人信息
      }

      setTimeout(() => {
        initialHome();
      }, 0);
      
      // 是否有要重定向的路由
      const hasPathName = window.location.hash.indexOf('pathName') === -1
      // 要跳转的路由，默认是/#/后面的，如http://localhost:8001/#/information为information
      let routerName = window.location.hash.split('#/')[1]; 
      // 携带了token，存入cookie,sessionStorage; 与此同时若还有重定向路由，跳转到此路由
      if (hasUrlToken) {
        Cookie.set("access_token", urlToken);
        window.sessionStorage.setItem('access_token', urlToken);
        if(hasPathName){
          routerName = window.location.hash.slice(2).split('pathName=')[1]
        }
      } 
      this.props.dispatch(routerRedux.replace(
        `${routerName}`,
      ));
    },
// 携带过期或错误的access_token导致h0认证失败的，重定向到h0登录页
    error: (msg) => {
      console.log('auth_token_err:', msg);
      if (msg === 401){
        redirectLogin()
      } 
    },
  });
};

